let package = try!(Package::for_path(manifest_path, opts.config));
let previous_resolve = match try!(ops::load_pkg_lockfile(&package, opts.config)) {
- Some(resolve) => resolve,
- None => {
- return generate_lockfile(manifest_path, opts.config);
- }
+ Some(resolve) => resolve,
+ None => return generate_lockfile(manifest_path, opts.config),
};
let mut registry = PackageRegistry::new(opts.config);
let mut to_avoid = HashSet::new();
let replace = package.manifest().replace();
let replace = replace.iter().map(|&(ref spec, ref dep)| {
for (key, val) in r.replacements().iter() {
- if spec.matches(key) && dep.matches_id(val) {
+ if spec.matches(key) &&
+ dep.matches_id(val) &&
+ keep(&val, to_avoid, &to_avoid_sources) {
return (spec.clone(), dep.clone().lock_to(val))
}
}
[..]#foo:0.1.0
"));
}
+
+#[test]
+fn update() {
+ Package::new("foo", "0.1.0").publish();
+
+ let foo = git::repo(&paths::root().join("override"))
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.1.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "pub fn foo() {}");
+ foo.build();
+
+ let p = project("local")
+ .file("Cargo.toml", &format!(r#"
+ [package]
+ name = "local"
+ version = "0.0.1"
+ authors = []
+
+ [dependencies]
+ foo = "0.1.0"
+
+ [replace]
+ "foo:0.1.0" = {{ git = '{0}' }}
+ "#, foo.url()))
+ .file("src/lib.rs", "");
+
+ assert_that(p.cargo_process("generate-lockfile"),
+ execs().with_status(0));
+ assert_that(p.cargo("update"),
+ execs().with_status(0)
+ .with_stderr("\
+[UPDATING] registry `[..]`
+[UPDATING] git repository `[..]`
+"));
+}